﻿using System;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Practices.EnterpriseLibrary.Data;
using GC2.Entities.Seguridad;
using GC2.ExceptionHandler.Services;

public partial class Backup_Default : System.Web.UI.Page
{

    String cliente;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<String> listaBasesdatos = new List<String>();

            foreach (string archivo in System.IO.Directory.GetFiles(Server.MapPath("~\\000\\")))
            {
                listaBasesdatos.Add(archivo);
            }
            cmbArchivos.DataSource = listaBasesdatos;
            cmbArchivos.DataBind();


            listaBasesdatos.Clear();
            foreach (ConnectionStringSettings  cli in ConfigurationManager.ConnectionStrings)
            {
                listaBasesdatos.Add(cli.Name);
            }
            cmbClientes.DataSource = listaBasesdatos;
            cmbClientes.DataBind();


            string cadenaConexion = ConfigurationManager.ConnectionStrings["Backup"].ToString(); //"Data Source=localhost;Integrated Security=True;Initial Catalog=master";

            try
            {
                using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(cadenaConexion))
                {
                    // Abrimos la conexión
                    con.Open();

                    // Obtenemos los nombres de las bases de datos que haya en el servidor
                    // se pueden filtrar para no mostrar las bases de datos de sistema
                    string sql = "select name from sys.databases where name not in('master', 'tempdb', 'model', 'msdb') order by 1";

                    // Obtenemos un dataReader con el resultado
                    System.Data.SqlClient.SqlCommand com =
                                 new System.Data.SqlClient.SqlCommand(sql, con);
                    System.Data.SqlClient.SqlDataReader dr = com.ExecuteReader();

                    // Recorremos el dataReader y añadimos un elemento nuevo 
                    // por cada registro
                    listaBasesdatos = new List<String>();
                    while (dr.Read())
                    {
                        listaBasesdatos.Add(dr[0].ToString());
                    }

                    // Asignamos la lista de bases de datos como origen de datos del comboGC2
                    cmbBasesdeDatos.DataSource = listaBasesdatos;
                    cmbBasesdeDatos.DataBind();
                }

            }
            catch (Exception ex)
            {
                ExceptionDAL exNew = new ExceptionDAL();
                lblResul.Text = cmbClientes.SelectedValue.Trim() + " - " + exNew.exDAL(ex.ToString()).ToString();
            }
        }
    }

    protected void btnRun_Click(object sender, EventArgs e)
    {
        try
        {
            string sql;
            Database DataBase = DatabaseFactory.CreateDatabase(cmbClientes.SelectedValue.Trim());

            System.IO.StreamReader sr = new System.IO.StreamReader(cmbArchivos.SelectedValue.Trim());
            sql = sr.ReadToEnd();
            sr.Close();

            String[] prm = { "GO" };
            String[] arrSql = sql.Split(prm, StringSplitOptions.None);
            foreach (string txt in arrSql)
            {
                if (!txt.Equals(""))
                DataBase.ExecuteNonQuery(CommandType.Text, txt); ;
            }

            lblResul.Text = lblResul.Text + "<br>" + "Ejecucion OK - " + cmbClientes.SelectedValue.Trim();
        }
        catch (SqlException sql_ex)
        {
            ExceptionSQL exNew = new ExceptionSQL();
            lblResul.Text = cmbClientes.SelectedValue.Trim() + " - " + exNew.exSQL(sql_ex.ToString()).ToString();
        }
        catch (Exception ex)
        {
            ExceptionDAL exNew = new ExceptionDAL();
            lblResul.Text = cmbClientes.SelectedValue.Trim() + " - " + exNew.exDAL(ex.ToString()).ToString();
        }
    }

    protected void btnRunT_Click(object sender, EventArgs e)
    {
        try
        {

            string sql;
            Database Database;
            System.IO.StreamReader sr;
            DbCommand cmd;

            foreach (ConnectionStringSettings  cli in ConfigurationManager.ConnectionStrings)
            {
                cliente = cli.Name;

                if (cli.Name.Substring(0,1).ToLower().Equals("c"))
                {
                    sql = "";
                    Database = DatabaseFactory.CreateDatabase(cli.Name);

                    sr = new System.IO.StreamReader(cmbArchivos.SelectedValue.Trim());
                    sql = sr.ReadToEnd();
                    sr.Close();
                    
                    String[] prm = { "GO" };
                    String[] arrSql = sql.Split(prm, StringSplitOptions.None);
                    foreach (string txt in arrSql)
                    {
                        if (!txt.Equals(""))
                        {
                            cmd = Database.GetSqlStringCommand(txt);
                            cmd.CommandTimeout = 1200;
                            cmd.Connection = Database.CreateConnection();
                            cmd.Connection.Open();
                            cmd.ExecuteNonQuery();
                            cmd.Connection.Close();
                        }
                    }
                    
                    cmd = null;
                    Database = null;
                    sr = null;

                    lblResul.Text = lblResul.Text + "<br>" + "Ejecucion OK - " + cliente;
                }                   
            }

        }
        catch (SqlException sql_ex)
        {
            ExceptionSQL exNew = new ExceptionSQL();
            lblResul.Text = cliente + " - " + exNew.exSQL(sql_ex.ToString()).ToString();
        }
        catch (Exception ex)
        {
            ExceptionDAL exNew = new ExceptionDAL();
            lblResul.Text = cliente + " - " + exNew.exDAL(ex.ToString()).ToString();
        }
    }
}
